import { ElMessage, ElNotification } from 'element-plus'
import { dateFormatter1, dateFormatter2 } from '@/assets/js/main.js'

// 奇门排盘API接口
import {
  startsApi, // 开始排盘
  douZhuanXingYiApi, // 斗转星移
  getNowLunarDateApi, // 获取当前农历日期、日柱时柱、十二时辰
  getNowGanZhiApi, // 获取当前日期的干支
  ganZhiToDateApi, // 通过干支获取日期
  isLeapMonthApi //  // 判断日期是否为闰月
} from '@/api/tool/qimenpaipan-api.js'

export default {
  el: 'app',
  data() {
    return {

      // 左侧导航
      navigations: [
        {
          id: 1,
          title: '首页', // 名称
          link: '/', // 路由
          icon: 'ios-home' // 图标
        },
        {
          id: 2,
          title: '辅助工具',
          link: '',
          icon: 'md-color-wand'
        },
        {
          id: 3,
          title: '奇门排盘',
          link: '',
          icon: 'md-pin'
        }
      ],

      // 右侧快捷导航
      fasts: [
        {
          id: 1,
          title: ' 八字排盘', // 名称
          link: '/tool/bz', // 路由
          icon: 'ios-open-outline' // 图标
        },
        {
          id: 2,
          title: '六爻起卦',
          link: '/tool/ly',
          icon: 'ios-open-outline'
        },
        {
          id: 3,
          title: '梅花易数起卦',
          link: '/tool/mhys',
          icon: 'ios-open-outline'
        }
      ],
      mark: 'qmpp', // 二级导航标识

      /* 选项 */
      reLoadingStatus: false, // 重新加载按钮状态（true: 可用。false: 禁用）
      name: '', // 姓名
      occupy: '', // 占事
      sex: 1, // 性别
      sexStr: '男',
      sexOptions: ['男', '女'],
      date: '', // 日期
      dateType: 0, // 日期类型
      dateTypeStr: '公历', // 日期类型
      dateTypeOptions: ['公历', '农历', '四柱'],
      leapMonth: false, // 是否闰月（true:是。false:否）
      leapMonthStatus: false, // 是否闰月状态（true:可选。false:不可选）
      trueSolar: false, // 是否真太阳时（true:是。false:否）
      address: '110000', // 地区：城市编码
      addressName: '北京市', // 地区：城市名称
      paiPanType: 0, // 排盘类型
      paiPanTypeStr: '转盘',
      paiPanTypeOptions: ['转盘', '飞盘'],
      qiMenType: 3, // 奇门类型
      qiMenTypeStr: '时家',
      qiMenTypeOptions: ['年家', '月家', '日家', '时家'],
      paiPanSystem: 0, // 排盘方法
      paiPanSystemStr: '拆补法',
      paiPanSystemOptions: ['拆补法'],
      // paiPanSystemOptions: ['拆补法', '置闰法', '茅山法'],
      resDate: false, // 选项重置时是否同时重置日期（true:是。false:否）

      // 更多选项
      yearGanZhiSet: 1, // 年干支设置
      yearGanZhiSetOptions: [
        { value: 0, label: '以正月初一作为新年的开始' },
        { value: 1, label: '以立春当天作为新年的开始' },
        { value: 2, label: '以立春交接的时刻作为新年的开始' }
      ],
      monthGanZhiSet: 1, // 月干支设置
      monthGanZhiSetOptions: [
        { value: 0, label: '以节交接当天起算' },
        { value: 1, label: '以节交接时刻起算' }
      ],
      dayGanZhiSet: 0, // 日干支设置
      dayGanZhiSetOptions: [
        { value: 0, label: '晚子时日干支算当天' },
        { value: 1, label: '晚子时日干支算明天' }
      ],
      hourGanZhiSet: 0, // 时干支设置
      hourGanZhiSetOptions: [{ value: 0, label: '支持早子时和晚子时' }],
      jieQi: 0, // 节气算法
      jieQiOptions: [
        { value: 0, label: '按天计算' },
        { value: 1, label: '不按天计算' }
      ],
      zhiShi: 0, // 值使排法
      zhiShiOptions: [
        { value: 0, label: '一律用死门为值使' },
        { value: 1, label: '根据阴阳遁判断' },
        { value: 2, label: '根据节气判断' }
      ],
      jieQi: 0, // 节气算法
      jieQiOptions: [
        { value: 0, label: '按天计算' },
        { value: 1, label: '不按天计算' }
      ],
      zhiShi: 0, // 值使排法
      zhiShiOptions: [
        { value: 0, label: '一律用死门为值使' },
        { value: 1, label: '根据阴阳遁判断' },
        { value: 2, label: '根据节气判断' }
      ],
      renPanFeiZhuan: 1, // 人盘排法（排盘类型为飞盘时生效）
      renPanFeiZhuanOptions: [
        { value: 1, label: '飞宫' },
        { value: 0, label: '转宫' }
      ],
      renPanZhuanGong: 0, // 人盘转宫法（排盘类型为飞盘时生效）
      renPanZhuanGongOptions: [
        { value: 0, label: '阴遁和阳遁一律顺转九宫' },
        { value: 1, label: '阴遁逆转九宫、阳遁顺转九宫' }
      ],
      renPanFeiGong: 0, // 人盘飞宫法（排盘类型为飞盘时生效）
      renPanFeiGongOptions: [
        { value: 0, label: '阴遁和阳遁一律顺飞九宫' },
        { value: 1, label: '阴遁逆飞九宫、阳遁顺飞九宫' }
      ],
      tianPanFeiGong: 0, // 天盘飞宫法（排盘类型为飞盘时生效）
      tianPanFeiGongOptions: [
        { value: 0, label: '阴遁和阳遁一律顺飞九宫' },
        { value: 1, label: '阴遁逆飞九宫、阳遁顺飞九宫' }
      ],
      shenPanFeiGong: 1, // 神盘飞宫法（排盘类型为飞盘时生效）
      shenPanFeiGongOptions: [
        { value: 0, label: '阴遁和阳遁一律顺飞九宫' },
        { value: 1, label: '阴遁逆飞九宫、阳遁顺飞九宫' }
      ],

      // 九宫格操作
      jgw: [4, 9, 2, 3, 5, 7, 8, 1, 6], // 后天八卦宫位
      jgm: ['巽四宫', '离九宫', '坤二宫', '震三宫', '中五宫', '兑七宫', '艮八宫', '坎一宫', '乾六宫'], // 后天八卦宫位标识
      jgs: ['mu', 'huo', 'tu', 'mu', 'tu', 'jin', 'tu', 'shui', 'jin'], // 后天八卦宫位标识样式
      jggMode: true, // 九宫格模式（true:详细。false:精简）
      jggModeT: '详细', // 九宫格模式标题
      luoGongTitle: ['坎一宫', '坤二宫', '震三宫', '巽四宫', '中五宫', '乾六宫', '兑七宫', '艮八宫', '离九宫'], // 九宫宫位中的名称
      luoGongIndex: 1, // 落宫
      jiuGongDiZhi: [['子'], ['未', '申'], ['卯'], ['辰', '巳'], [], ['戌', '亥'], ['酉'], ['丑', '寅'], ['午']], // 九宫中的地支
      baMenTitle: ['休门', '死门', '伤门', '杜门', '', '开门', '惊门', '生门', '景门'], // 九宫中的八门
      jiuXingTitle: ['天蓬星', '天芮星', '天冲星', '天辅星', '', '天心星', '天柱星', '天任星', '天英星'], // 九宫中的九星

      jiuGongXianTianShu: ['6', '8', '4', '5', '', '1', '2', '7', '3'], // 九宫中的先天数（1~9宫）
      jiuGongHouTianShu: ['1', '2', '3', '4', '', '6', '7', '8', '9'], // 九宫中的后天数（1~9宫）
      jiuGongWuXingShu: ['1、6', '5、10', '3、8', '3、8', '5、10', '4、9', '4、9', '5、10', '2、7'], // 九宫中的五行数（1~9宫）
      jiuGongZongShu: ['1、6', '2、5、8、10', '3、4、8', '3、4、5、8', '5、10', '1、4、6、9', '2、4、7、9', '5、7、8、10', '2、3、7、9'], // 九宫中的总数（1~9宫）

      // 斗转星移
      douZhuanXingYiMode: 0, // 斗转星移模式
      douZhuanXingYiModeStr: '顺时针旋转',
      douZhuanXingYiModeOptions: ['顺时针旋转', '逆时针旋转'],
      douZhuanXingYiType: 0, // 斗转星移类型
      douZhuanXingYiTypeStr: '全盘',
      douZhuanXingYiTypeOptions: ['全盘', '地盘', '天盘', '人盘', '神盘'],
      douZhuanXingYiStatus: false, // 是否已斗转星移（true:是。false:否）
      douZhuanXingYiCount: 0, // 斗转星移次数

      /* 今日时辰 */
      year: 0, // 当前年
      month: 0, // 当前月
      day: 0, // 当前日
      hour: 0, // 当前时
      minute: 0, // 当前分
      second: 0, // 当前秒
      nowLunarStr: '', // 当前农历日期
      nowDayHourGanZhi: '', // 当前日期的日柱
      twelveHours: null, // 十二时辰
      twelveHoursProve: [
        { time: 0, prove: '昨日23:00:00 ~ 今日00:59:59', hourZhi: '子' },
        { time: 1, prove: '01:00:00 ~ 02:59:59', hourZhi: '丑' },
        { time: 3, prove: '03:00:00 ~ 04:59:59', hourZhi: '寅' },
        { time: 5, prove: '05:00:00 ~ 06:59:59', hourZhi: '卯' },
        { time: 7, prove: '07:00:00 ~ 08:59:59', hourZhi: '辰' },
        { time: 9, prove: '09:00:00 ~ 10:59:59', hourZhi: '巳' },
        { time: 11, prove: '11:00:00 ~ 12:59:59', hourZhi: '午' },
        { time: 13, prove: '13:00:00 ~ 14:59:59', hourZhi: '未' },
        { time: 15, prove: '15:00:00 ~ 16:59:59', hourZhi: '申' },
        { time: 17, prove: '17:00:00 ~ 18:59:59', hourZhi: '酉' },
        { time: 19, prove: '19:00:00 ~ 20:59:59', hourZhi: '戌' },
        { time: 21, prove: '21:00:00 ~ 22:59:59', hourZhi: '亥' }
      ],
      hourStatus: false, // 小时数是否已初始化（true:是。false:否）

      // 按钮操作
      resettingButtonStatus: true, // 记录是否已点击重置按钮（true:已点击。false:未点击）
      startsButton: true, // 排盘按钮状态（true:启用。false:禁用）

      /* 弹窗 */
      seniorDialog: false, // 高级选项弹窗
      siZhuDialog: false, // 四柱转日期弹窗
      neiPanDialog: false, // 内盘说明弹窗
      waiPanDialog: false, // 外盘说明弹窗

      /* 数据 */
      data: {}, // 数据
      dataStatus: false, // 初始化数据状态（true:存在。false:不存在）
      dataShiLiStatus: true, // 示例数据显示状态（true:显示。false:隐藏）
      dataShiLiSwitch: false, // 是否允许将示例数据切换为完整数据（true:允许。false:禁止）
      dataAllPage: 1, // 完整数据默认显示的数据（1:基础信息。2:更多信息）
      nTab: '1', // 默认显示伏吟
      kyTab: '1', // 默认显示十干克应
      guaTab: '1', // 默认显示门宫卦
      sTab: '1', // 默认显示急事方位解读

      /* 四柱转日期 */
      siZhuToDateColumns: [
        // 日期表格标题
        { type: 'index', title: '序号', width: 60, align: 'center', resizable: true },
        { title: '公历日期', key: 'solar', width: 150, align: 'center', resizable: true },
        { title: '农历日期', key: 'lunar', width: 200, align: 'center', resizable: true },
        { title: '操作', slot: 'action', align: 'center', resizable: true }
      ],
      siZhuToDate: [], // 日期
      siZhuToDateTotal: 0, // 日期条数
      siZhuButton: true, // 四柱转日期按钮状态（true:启用。false:禁用）
      beginYear: 1900, // 起始年
      beginYear2: 0, // 起始年
      yearGanZhi: null, // 年干支
      monthGanZhi: null, // 月干支
      dayGanZhi: null, // 日干支
      hourGanZhi: null, // 时干支
      ganZhiOptions: [ // 六十甲子

        { value: '甲子', label: '甲子' },
        { value: '甲戌', label: '甲戌' },
        { value: '甲申', label: '甲申' },
        { value: '甲午', label: '甲午' },
        { value: '甲辰', label: '甲辰' },
        { value: '甲寅', label: '甲寅' },
        { value: '乙丑', label: '乙丑' },
        { value: '乙亥', label: '乙亥' },
        { value: '乙酉', label: '乙酉' },
        { value: '乙未', label: '乙未' },
        { value: '乙巳', label: '乙巳' },
        { value: '乙卯', label: '乙卯' },
        { value: '丙寅', label: '丙寅' },
        { value: '丙子', label: '丙子' },
        { value: '丙戌', label: '丙戌' },
        { value: '丙申', label: '丙申' },
        { value: '丙午', label: '丙午' },
        { value: '丙辰', label: '丙辰' },
        { value: '丁卯', label: '丁卯' },
        { value: '丁丑', label: '丁丑' },
        { value: '丁亥', label: '丁亥' },
        { value: '丁酉', label: '丁酉' },
        { value: '丁未', label: '丁未' },
        { value: '丁巳', label: '丁巳' },
        { value: '戊辰', label: '戊辰' },
        { value: '戊寅', label: '戊寅' },
        { value: '戊子', label: '戊子' },
        { value: '戊戌', label: '戊戌' },
        { value: '戊申', label: '戊申' },
        { value: '戊午', label: '戊午' },
        { value: '己巳', label: '己巳' },
        { value: '己卯', label: '己卯' },
        { value: '己丑', label: '己丑' },
        { value: '己亥', label: '己亥' },
        { value: '己酉', label: '己酉' },
        { value: '己未', label: '己未' },
        { value: '庚午', label: '庚午' },
        { value: '庚辰', label: '庚辰' },
        { value: '庚寅', label: '庚寅' },
        { value: '庚子', label: '庚子' },
        { value: '庚戌', label: '庚戌' },
        { value: '庚申', label: '庚申' },
        { value: '辛未', label: '辛未' },
        { value: '辛巳', label: '辛巳' },
        { value: '辛卯', label: '辛卯' },
        { value: '辛丑', label: '辛丑' },
        { value: '辛亥', label: '辛亥' },
        { value: '辛酉', label: '辛酉' },
        { value: '壬申', label: '壬申' },
        { value: '壬午', label: '壬午' },
        { value: '壬辰', label: '壬辰' },
        { value: '壬寅', label: '壬寅' },
        { value: '壬子', label: '壬子' },
        { value: '壬戌', label: '壬戌' },
        { value: '癸酉', label: '癸酉' },
        { value: '癸未', label: '癸未' },
        { value: '癸巳', label: '癸巳' },
        { value: '癸卯', label: '癸卯' },
        { value: '癸丑', label: '癸丑' },
        { value: '癸亥', label: '癸亥' }
      ],
      yearGanZhi2: null, // 年干支
      monthGanZhi2: null, // 月干支
      dayGanZhi2: null, // 日干支
      hourGanZhi2: null, // 时干支

      jgpCollapse: '1', // 信息解读-奇门九宫盘折叠面板

      jiShiDialog: false, // 急事断定方法弹窗
      huanShiDialog: false, // 缓事断定方法弹窗

      sixGuaIndex: [5, 4, 3, 2, 1, 0], // 六爻从上至下索引

    }
  },
  watch: {
    // 姓名监听
    name(val) {
      // console.log('姓名监听 --- ' + this.resettingButtonStatus);
      if (this.resettingButtonStatus) this.initializeData(); // ★ 初始化数据
    },
    // 占事监听
    occupy(val) {
      if (this.resettingButtonStatus) this.initializeData(); // ★ 初始化数据
    },
    // 性别监听
    sexStr(val) {
      if (val === '男') {
        this.sex = 1;
        // this.initializeData(); // 初始化数据
        this.data.sex = '男';
      } else if (val === '女') {
        this.sex = 0;
        // this.initializeData(); // 初始化数据
        this.data.sex = '女';
      }

    },
    // 日期类型监听
    dateTypeStr(val) {
      if (val === '公历') {
        this.dateType = 0;
        this.leapMonth = false; // 取消闰月
        this.leapMonthStatus = false; // 禁用闰月选项
        if (this.resettingButtonStatus) this.initializeData(); // ★ 初始化数据
        // this.notification('success', 800, '', '日期类型已转为：<b>' + this.dateTypeStr + '<b/>');
      } else if (val === '农历') {
        this.dateType = 1;
        this.isLeapMonth(); // 判断日期是否为闰月
        if (this.resettingButtonStatus) this.initializeData(); // ★ 初始化数据
        // this.notification('success', 800, '', '日期类型已转为：<b>' + this.dateTypeStr + '<b/>');
      } else if (val === '四柱') {
        // this.dateType = 2;
        this.leapMonth = false; // 取消闰月
        this.leapMonthStatus = false; // 禁用闰月选项
        this.getNowGanZhi(); // 获取当前日期干支
        // this.notification('success', 800, '', '日期类型已转为：<b>' + this.dateTypeStr + '<b/>');
      }
    },
    // 日期监听
    date(val) {
      if (this.dateTypeStr === '农历') {
        this.isLeapMonth(); // 判断日期是否为闰月
      }
      // this.initializeData(); // 初始化数据
      // this.starts(); // 开始排盘
    },
    // 真太阳时选项监听
    trueSolar(val) {
      if (!val) {
        this.address = '110000' // 重置城市编码
        this.addressName = '北京市' // 重置城市名称
      }
    },
    // 闰月监听
    leapMonth(val) {
      if (this.resettingButtonStatus) this.initializeData(); // ★ 初始化数据
    },
    // 地区监听
    addressName(val) {
      // this.initializeData(); // 初始化数据
    },
    // 排盘类型监听
    paiPanTypeStr(val) {
      if (val === '转盘') {
        this.paiPanType = 0;
      } else if (val === '飞盘') {
        this.paiPanType = 1;
      }
      if (this.resettingButtonStatus) this.initializeData(); // ★ 初始化数据
    },
    // 奇门类型监听
    qiMenTypeStr(val) {
      if (val === '年家') {
        this.qiMenType = 0;
      } else if (val === '月家') {
        this.qiMenType = 1;
      } else if (val === '日家') {
        this.qiMenType = 2;
      } else if (val === '时家') {
        this.qiMenType = 3;
      }
      if (this.resettingButtonStatus) this.initializeData(); // ★ 初始化数据
    },
    // 排盘方法监听
    paiPanSystemStr(val) {
      if (this.resettingButtonStatus) {
        // this.initializeData(); // ★ 初始化数据
      }
    },
    // 年干支设置监听
    yearGanZhiSet(val) {
      if (this.resettingButtonStatus) this.initializeData(); // ★ 初始化数据
    },
    // 月干支设置监听
    monthGanZhiSet(val) {
      if (this.resettingButtonStatus) this.initializeData(); // ★ 初始化数据
    },
    // 日干支设置监听
    dayGanZhiSet(val) {
      if (this.resettingButtonStatus) this.initializeData(); // ★ 初始化数据
    },
    // 时干支设置监听
    hourGanZhiSet(val) {
      if (this.resettingButtonStatus) this.initializeData(); // ★ 初始化数据
    },
    // 节气算法监听
    jieQi(val) {
      if (this.resettingButtonStatus) this.initializeData(); // ★ 初始化数据
    },
    // 值使排法监听
    zhiShi(val) {
      if (this.resettingButtonStatus) this.initializeData(); // ★ 初始化数据
    },
    // 人盘排法监听
    renPanFeiZhuan(val) {
      if (this.resettingButtonStatus) {
        if (this.paiPanType === 1) this.initializeData(); // ★ 初始化数据
      }
    },
    // 人盘转宫法监听
    renPanZhuanGong(val) {
      if (this.resettingButtonStatus) this.initializeData(); // ★ 初始化数据
    },
    // 人盘飞宫法监听
    renPanFeiGong(val) {
      if (this.resettingButtonStatus) this.initializeData(); // ★ 初始化数据
    },
    // 天盘飞宫法监听
    tianPanFeiGong(val) {
      if (this.resettingButtonStatus) this.initializeData(); // ★ 初始化数据
    },
    // 神盘飞宫法监听
    shenPanFeiGong(val) {
      if (this.resettingButtonStatus) this.initializeData(); // ★ 初始化数据
    },
    // 起始年监听
    beginYear(val) {
      if (val <= 0 || val === '') {
        this.beginYear = 1;
      } else if (val > 9999) {
        this.beginYear = 9999;
      }
    },
    // 四柱转日期弹窗监听
    siZhuDialog(val) {
      if (!val) {
        // 日期类型转为公历
        this.dateType = 0;
        this.dateTypeStr = '公历';
      }
    },
    // 斗转星移模式监听
    douZhuanXingYiModeStr(val) {
      if (val === '顺时针旋转') {
        this.douZhuanXingYiMode = 0;
      } else if (val === '逆时针旋转') {
        this.douZhuanXingYiMode = 1;
      }
    },
    // 斗转星移类型监听
    douZhuanXingYiTypeStr(val) {
      if (val === '全盘') {
        this.douZhuanXingYiType = 0;
      } else if (val === '地盘') {
        this.douZhuanXingYiType = 1;
      } else if (val === '天盘') {
        this.douZhuanXingYiType = 2;
      } else if (val === '人盘') {
        this.douZhuanXingYiType = 3;
      } else if (val === '神盘') {
        this.douZhuanXingYiType = 4;
      }
    },
    // 小时数监听
    hour(val) {
      this.getNowLunarDate(); // 获取当前农历日期、日柱时柱、十二时辰
      if (this.hourStatus) {
        this.date = new Date(); // 更新至最新日期
      } else {
        this.hourStatus = true;
      }
    }
  },
  created() {
    this.date = new Date(); // 初始化日期
    this.initializeData(); // 初始化数据
    this.getNowSolarDate(); // 实时获取当前实时公历年月日时分秒
  },
  mounted() {
  },
  methods: {

    /* 数据区域操作 */
    
    /**
     * ★ 初始化数据
     */
    initializeData() {

      this.reLoadingStatus = false; // 禁用重新加载按钮

      // 构造条件
      let query = {
        name: this.name == '' ? '缘主' : this.name, // 姓名
        occupy: this.occupy == '' ? '' : this.occupy, // 占事
        sex: this.sex, // 性别
        date: this.date, // 日期
        dateType: this.dateType, // 日期类型
        address: this.addressName, // 地区名称
        leapMonth: this.leapMonth === true ? 1 : 0, // 是否闰月
        paiPanType: this.paiPanType, // 排盘类型
        qiMenType: this.qiMenType, // 奇门类型
        paiPanSystem: this.paiPanSystem, // 排盘方法
        yearGanZhiSet: this.yearGanZhiSet, // 年干支设置
        monthGanZhiSet: this.monthGanZhiSet, // 月干支设置
        dayGanZhiSet: this.dayGanZhiSet, // 日干支设置
        hourGanZhiSet: this.hourGanZhiSet, // 时干支设置
        jieQi: this.jieQi, // 节气算法
        zhiShi: this.zhiShi, // 值使排法
        renPanFeiZhuan: this.renPanFeiZhuan, // 人盘排法
        renPanZhuanGong: this.renPanZhuanGong, // 人盘转宫法
        renPanFeiGong: this.renPanFeiGong, // 人盘飞宫法
        tianPanFeiGong: this.tianPanFeiGong, // 天盘飞宫法
        shenPanFeiGong: this.shenPanFeiGong // 神盘飞宫法
      }

      // 发送请求
      startsApi(query).then((res) => {
        if (String(res.data.code) === '200') {
          if (null !== res.data.data) {
            this.data = res.data.data; // 数据
            this.startsButton = true; // 启用排盘按钮
            this.reLoadingStatus = true; // 启用重新加载按钮
            this.dataStatus = true; // 初始化数据状态（true:存在。false:不存在）
            this.dataShiLiSwitch = true; // 是否允许将示例数据切换为完整数据（true:允许。false:禁止）

            // this.dataShiLiStatus = false; // 切换为完整数据

            // this.elMessage(3000, true, 'success', res.data.msg || '操作成功');
          } else {
            this.startsButton = true; // 启用排盘按钮
            this.reLoadingStatus = true; // 启用重新加载按钮
            this.dataShiLiSwitch = false; // 是否允许将示例数据切换为完整数据（true:允许。false:禁止）
            // this.elMessage(3000, true, 'error', res.data.msg || '操作失败');
          }
        } else {
          this.startsButton = true; // 启用排盘按钮
          this.reLoadingStatus = true; // 启用重新加载按钮
          this.dataShiLiSwitch = false; // 是否允许将示例数据切换为完整数据（true:允许。false:禁止）
          // this.elMessage(3000, true, 'error', res.data.msg || '操作失败');
          this.notification('warning', 1500, '', res.data.msg || '操作失败');
        }
      }).catch(() => {
        this.startsButton = true; // 启用排盘按钮
        this.reLoadingStatus = true; // 启用重新加载按钮
        this.dataShiLiSwitch = false; // 是否允许将示例数据切换为完整数据（true:允许。false:禁止）
        // this.elMessage(3000, true, 'error', '数据加载失败，请稍后重试 ~');
      })

    },

    /**
     * ★ 开始排盘
     */
    starts() {

      // 判断是否允许切换完整数据
      if (this.dataShiLiSwitch) {
        this.dataShiLiStatus = false; // 切换为完整数据
      } else {
        this.initializeData(); // ★ 初始化数据
      }

    },

    /**
     * ★ 上下局
     * 
     * @param {boolean} status true:下一局。false:上一局
     */
    shangXiaJu(status) {

      this.douZhuanXingYiStatus = false; // 未斗转星移
      this.douZhuanXingYiCount = 0; // 重置斗转星移次数

      // 日期格式化
      this.date = dateFormatter2(this.data.solarStr);
      if (status) {
        // 下一局
        this.date.setHours(this.date.getHours() + 2);
        this.initializeData(); // ★ 初始化数据
      } else {
        // 上一局
        this.date.setHours(this.date.getHours() - 2);
        this.initializeData(); // ★ 初始化数据
      }

    },

    /**
     * ★ 设置时辰数并开始排盘
     * 
     * @param {number} hour 时辰数
     * @param {string} hourZhi 时辰地支
     */
    setHourStarts(hour, hourZhi) {

      // 未斗转星移时，判断是否已排盘当前时辰数据
      // if (!this.douZhuanXingYiStatus) { 
      //   if (hourZhi === this.data.hourZhi) {
      //     return this.elMessage(2000, true, 'info', '已是当前时辰【' + this.data.hourGanZhi + '时】');
      //   }
      // }

      let date = new Date();

      if (null !== hour || undefined !== hour) {
        date.setHours(hour); // 设置小时
        date.setMinutes(0); // 设置分钟
        date.setSeconds(0); // 设置秒数
        this.date = date;
      }

      this.douZhuanXingYiStatus = false; // 未斗转星移
      this.douZhuanXingYiCount = 0; // 重置斗转星移次数
      this.initializeData(); // ★ 初始化数据

    },

    /**
     * 斗转星移
     */
    douZhuanXingYi() {

      // 判断排盘模式
      if (this.data.paiPanType === 0) {
        this.zhuanDouZhuanXingYi(); // 斗转星移 - 转盘
      } else {
        this.feiDouZhuanXingYi(); // 斗转星移 - 飞盘
      }

    },

    /**
     * 斗转星移 - 转盘
     */
    zhuanDouZhuanXingYi() {

      // 构造条件
      let query = {
        paiPanType: this.data.paiPanType, // 排盘类型（0:转盘。1:飞盘）
        xunShou: this.data.xunShou, // 旬首
        jiJie: this.data.jiJie, // 季节
        hourZhi: this.data.baZi[3].substring(1, 2), // 日支
        douZhuanXingYiMode: this.douZhuanXingYiMode, // 斗转星移模式
        douZhuanXingYiType: this.douZhuanXingYiType, // 斗转星移类型
        diPan: this.data.diPan, // 地盘
        tianPan: this.data.tianPan, // 天盘
        tianPanQiYiToTq: this.data.tianPanQiYiToTq, // 天盘奇仪（包含天禽星）
        tianPanQiYiExTq: this.data.tianPanQiYiExTq, // 天盘奇仪（不包含天禽星）
        renPan: this.data.renPan, // 人盘
        shenPan: this.data.shenPan // 神盘
      }

      // 发送请求
      douZhuanXingYiApi(query).then((res) => {
        if (String(res.data.code) === '200') {
          let data = res.data.data
          if (null !== res.data.data) {

            this.data.baGuaWangShuai = data.baGuaWangShuai // 八卦旺衰
            this.data.jiuXingWangShuai = data.jiuXingWangShuai // 九星旺衰
            this.data.baMenWangShuai = data.baMenWangShuai // 八门旺衰

            if (null !== data.diPanQiYiLuoGongLink) {
              this.data.diPan = data.diPan // 地盘
              this.data.fuYin = data.fuYin // 伏吟
              this.data.fanYin = data.fanYin // 反吟
              this.data.liuYiJiXing = data.liuYiJiXing // 六仪击刑
              this.data.qiYiRuMu = data.qiYiRuMu // 奇仪入墓
              this.data.diPanQiYiLuoGongLink = data.diPanQiYiLuoGongLink // 地盘奇仪与落宫地支的关系
              this.data.shiGanKeYing = data.shiGanKeYing // 十干克应
              this.data.baMenKeYing = data.baMenKeYing // 八门克应
            }

            if (null !== data.tianPanQiYiLuoGongExTqLink && null !== data.tianPanQiYiLuoGongToTqLink) {
              this.data.tianPan = data.tianPan // 天盘
              this.data.fuYin = data.fuYin // 伏吟
              this.data.fanYin = data.fanYin // 反吟
              this.data.liuYiJiXing = data.liuYiJiXing // 六仪击刑
              this.data.qiYiRuMu = data.qiYiRuMu // 奇仪入墓
              this.data.jiXingRuMuLinkToTq = data.jiXingRuMuLinkToTq // 六仪击刑、奇仪入墓状态，只包含[天禽星]携带的奇仪（1~9宫）
              this.data.jiXingRuMuLinkExTq = data.jiXingRuMuLinkExTq // 六仪击刑、奇仪入墓状态，不包含[天禽星]携带的奇仪（1~9宫）
              this.data.jiuXingLuoGongStatus = data.jiuXingLuoGongStatus // 九星落宫状态
              this.data.tianPanQiYiToTq = data.tianPanQiYiToTq // 天盘奇仪（包含天禽星）
              this.data.tianPanQiYiExTq = data.tianPanQiYiExTq //  天盘奇仪（不包含天禽星）
              this.data.tianPanQiYiLuoGongToTqLink = data.tianPanQiYiLuoGongToTqLink // 天盘奇仪与落宫地支的关系（包含天禽星）
              this.data.tianPanQiYiLuoGongExTqLink = data.tianPanQiYiLuoGongExTqLink // 天盘奇仪与落宫地支的关系（不包含天禽星）
              this.data.shiGanKeYing = data.shiGanKeYing // 十干克应
              this.data.baMenKeYing = data.baMenKeYing // 八门克应
              this.data.xingMenKeYing = data.xingMenKeYing // 星门克应
              this.data.jiuXingShiYing = data.jiuXingShiYing // 九星时应
              this.data.buZhenJiXing = data.buZhenJiXing // 击邢问题
              this.data.buZhenRuMu = data.buZhenRuMu // 入墓问题
              this.data.buZhenGeng = data.buZhenGeng // 庚问题
              this.data.buZhenBaiHu = data.buZhenBaiHu // 白虎问题
              this.data.buZhenMenPo = data.buZhenMenPo // 门迫问题
              this.data.buZhenKongWang = data.buZhenKongWang // 空亡问题
            }

            if (null !== data.baMenLuoGongStatus) {
              this.data.renPan = data.renPan // 人盘
              this.data.fuYin = data.fuYin // 伏吟
              this.data.fanYin = data.fanYin // 反吟
              this.data.menPoLink = data.menPoLink // 门迫状态（1~9宫）
              this.data.baMenLuoGongStatus = data.baMenLuoGongStatus // 八门落宫状态
              this.data.baMenKeYing = data.baMenKeYing // 八门克应
              this.data.baMenJingYing = data.baMenJingYing // 八门静应
              this.data.baMenDongYing = data.baMenDongYing // 八门动应
              this.data.xingMenKeYing = data.xingMenKeYing // 星门克应
              this.data.buZhenJiXing = data.buZhenJiXing // 击邢问题
              this.data.buZhenRuMu = data.buZhenRuMu // 入墓问题
              this.data.buZhenGeng = data.buZhenGeng // 庚问题
              this.data.buZhenBaiHu = data.buZhenBaiHu // 白虎问题
              this.data.buZhenMenPo = data.buZhenMenPo // 门迫问题
              this.data.buZhenKongWang = data.buZhenKongWang // 空亡问题
            }

            if (null !== data.baShenLuoGongStatus) {
              this.data.shenPan = data.shenPan // 神盘
              this.data.fuYin = data.fuYin // 伏吟
              this.data.fanYin = data.fanYin // 反吟
              this.data.baShenLuoGongStatus = data.baShenLuoGongStatus // 八神落宫状态
              this.data.buZhenJiXing = data.buZhenJiXing // 击邢问题
              this.data.buZhenRuMu = data.buZhenRuMu // 入墓问题
              this.data.buZhenGeng = data.buZhenGeng // 庚问题
              this.data.buZhenBaiHu = data.buZhenBaiHu // 白虎问题
              this.data.buZhenMenPo = data.buZhenMenPo // 门迫问题
              this.data.buZhenKongWang = data.buZhenKongWang // 空亡问题
            }

            // 门宫卦相关数据
            if (null !== data.menGongGuaMing) {
              this.data.menGongJinBen = data.menGongJinBen; // 门宫基本信息
              this.data.menGongGuaMing = data.menGongGuaMing; // 门宫卦卦名
              this.data.menGongGuaXiang = data.menGongGuaXiang; // 门宫卦卦象
              this.data.menGongGuaYaoMing = data.menGongGuaYaoMing; // 门宫卦爻名
              this.data.menGongGuaYaoCi = data.menGongGuaYaoCi; // 门宫卦爻辞
              this.data.menGongGuaYi = data.menGongGuaYi; // 门宫卦卦义
            }

            // 星宫卦相关数据
            if (null !== data.xingGongJinBen) {
              this.data.xingGongJinBen = data.xingGongJinBen; // 星宫基本信息
              this.data.xingGongGuaMing = data.xingGongGuaMing; // 星宫卦卦名
              this.data.xingGongGuaXiang = data.xingGongGuaXiang; // 星宫卦卦象
              this.data.xingGongGuaYaoMing = data.xingGongGuaYaoMing; // 星宫卦爻名
              this.data.xingGongGuaYaoCi = data.xingGongGuaYaoCi; // 星宫卦爻辞
              this.data.xingGongGuaYi = data.xingGongGuaYi; // 星宫卦卦义
            }

            this.douZhuanXingYiStatus = true; // 已斗转星移
            this.douZhuanXingYiCount += 1; // 斗转星移次数+1

            // this.elMessage(true, 'success', res.data.msg || '操作成功')
          } else {
            // this.elMessage(true, 'error', res.data.msg || '操作失败')
          }
        } else {
          // this.elMessage(true, 'error', res.data.msg || '操作失败')
          this.notification('warning', 1500, '', res.data.msg || '操作失败');
        }
      }).catch(() => {
        // this.elMessage(true, 'error', '操作失败')
      })

    },

    /**
     * 斗转星移 - 飞盘
     */
    feiDouZhuanXingYi() {

      // 构造条件
      let query = {
        paiPanType: this.data.paiPanType, // 排盘类型（0:转盘。1:飞盘）
        xunShou: this.data.xunShou, // 旬首
        jiJie: this.data.jiJie, // 季节
        hourZhi: this.data.baZi[3].substring(1, 2), // 日支
        douZhuanXingYiMode: this.douZhuanXingYiMode, // 斗转星移模式
        douZhuanXingYiType: this.douZhuanXingYiType, // 斗转星移类型
        diPan: this.data.diPan, // 地盘
        tianPan: this.data.tianPan, // 天盘
        tianPanQiYi: this.data.tianPanQiYi, // 天盘奇仪
        renPan: this.data.renPan, // 人盘
        shenPan: this.data.shenPan // 神盘
      }

      // 发送请求
      douZhuanXingYiApi(query).then((res) => {
        if (String(res.data.code) === '200') {
          let data = res.data.data
          if (null !== res.data.data) {

            this.data.baGuaWangShuai = data.baGuaWangShuai // 八卦旺衰
            this.data.jiuXingWangShuai = data.jiuXingWangShuai // 九星旺衰
            this.data.baMenWangShuai = data.baMenWangShuai // 八门旺衰

            if (null !== data.diPanQiYiLuoGongLink) {
              this.data.diPan = data.diPan // 地盘
              this.data.fuYin = data.fuYin // 伏吟
              this.data.fanYin = data.fanYin // 反吟
              this.data.liuYiJiXing = data.liuYiJiXing // 六仪击刑
              this.data.qiYiRuMu = data.qiYiRuMu // 奇仪入墓
              this.data.diPanQiYiLuoGongLink = data.diPanQiYiLuoGongLink // 地盘奇仪与落宫地支的关系
              this.data.shiGanKeYing = data.shiGanKeYing // 十干克应
              this.data.baMenKeYing = data.baMenKeYing // 八门克应
            }

            if (null !== data.tianPanQiYiLuoGongLink) {
              this.data.tianPan = data.tianPan // 天盘
              this.data.fuYin = data.fuYin // 伏吟
              this.data.fanYin = data.fanYin // 反吟
              this.data.liuYiJiXing = data.liuYiJiXing // 六仪击刑
              this.data.qiYiRuMu = data.qiYiRuMu // 奇仪入墓
              this.data.jiXingRuMuLink = data.jiXingRuMuLink // 六仪击刑、奇仪入墓状态（1~9宫）
              this.data.jiuXingLuoGongStatus = data.jiuXingLuoGongStatus // 九星落宫状态
              this.data.tianPanQiYi = data.tianPanQiYi // 天盘奇仪
              this.data.tianPanQiYiLuoGongLink = data.tianPanQiYiLuoGongLink // 天盘奇仪与落宫地支的关系
              this.data.shiGanKeYing = data.shiGanKeYing // 十干克应
              this.data.baMenKeYing = data.baMenKeYing // 八门克应
              this.data.xingMenKeYing = data.xingMenKeYing // 星门克应
              this.data.jiuXingShiYing = data.jiuXingShiYing // 九星时应
              this.data.buZhenJiXing = data.buZhenJiXing // 击邢问题
              this.data.buZhenRuMu = data.buZhenRuMu // 入墓问题
              this.data.buZhenGeng = data.buZhenGeng // 庚问题
              this.data.buZhenBaiHu = data.buZhenBaiHu // 白虎问题
              this.data.buZhenMenPo = data.buZhenMenPo // 门迫问题
              this.data.buZhenKongWang = data.buZhenKongWang // 空亡问题
            }

            if (null !== data.baMenLuoGongStatus) {
              this.data.renPan = data.renPan // 人盘
              this.data.fuYin = data.fuYin // 伏吟
              this.data.fanYin = data.fanYin // 反吟
              this.data.menPoLink = data.menPoLink // 门迫状态（1~9宫）
              this.data.baMenLuoGongStatus = data.baMenLuoGongStatus // 八门落宫状态
              this.data.baMenKeYing = data.baMenKeYing // 八门克应
              this.data.baMenJingYing = data.baMenJingYing // 八门静应
              this.data.baMenDongYing = data.baMenDongYing // 八门动应
              this.data.xingMenKeYing = data.xingMenKeYing // 星门克应
              this.data.buZhenJiXing = data.buZhenJiXing // 击邢问题
              this.data.buZhenRuMu = data.buZhenRuMu // 入墓问题
              this.data.buZhenGeng = data.buZhenGeng // 庚问题
              this.data.buZhenBaiHu = data.buZhenBaiHu // 白虎问题
              this.data.buZhenMenPo = data.buZhenMenPo // 门迫问题
              this.data.buZhenKongWang = data.buZhenKongWang // 空亡问题
            }

            if (null !== data.jiuShenLuoGongStatus) {
              this.data.shenPan = data.shenPan // 神盘
              this.data.fuYin = data.fuYin // 伏吟
              this.data.fanYin = data.fanYin // 反吟
              this.data.jiuShenLuoGongStatus = data.jiuShenLuoGongStatus // 九神落宫状态
              this.data.buZhenJiXing = data.buZhenJiXing // 击邢问题
              this.data.buZhenRuMu = data.buZhenRuMu // 入墓问题
              this.data.buZhenGeng = data.buZhenGeng // 庚问题
              this.data.buZhenBaiHu = data.buZhenBaiHu // 白虎问题
              this.data.buZhenMenPo = data.buZhenMenPo // 门迫问题
              this.data.buZhenKongWang = data.buZhenKongWang // 空亡问题
            }

            // 门宫卦相关数据
            if (null !== data.menGongGuaMing) {
              this.data.menGongJinBen = data.menGongJinBen; // 门宫基本信息
              this.data.menGongGuaMing = data.menGongGuaMing; // 门宫卦卦名
              this.data.menGongGuaXiang = data.menGongGuaXiang; // 门宫卦卦象
              this.data.menGongGuaYaoMing = data.menGongGuaYaoMing; // 门宫卦爻名
              this.data.menGongGuaYaoCi = data.menGongGuaYaoCi; // 门宫卦爻辞
              this.data.menGongGuaYi = data.menGongGuaYi; // 门宫卦卦义
            }

            // 星宫卦相关数据
            if (null !== data.xingGongJinBen) {
              this.data.xingGongJinBen = data.xingGongJinBen; // 星宫基本信息
              this.data.xingGongGuaMing = data.xingGongGuaMing; // 星宫卦卦名
              this.data.xingGongGuaXiang = data.xingGongGuaXiang; // 星宫卦卦象
              this.data.xingGongGuaYaoMing = data.xingGongGuaYaoMing; // 星宫卦爻名
              this.data.xingGongGuaYaoCi = data.xingGongGuaYaoCi; // 星宫卦爻辞
              this.data.xingGongGuaYi = data.xingGongGuaYi; // 星宫卦卦义
            }

            this.douZhuanXingYiStatus = true; // 已斗转星移
            this.douZhuanXingYiCount += 1; // 斗转星移次数1
            // this.elMessage(true, 'success', res.data.msg || '操作成功')
          } else {
            // this.elMessage(true, 'error', res.data.msg || '操作失败')
          }
        } else {
          // this.elMessage(true, 'error', res.data.msg || '操作失败')
          this.notification('warning', 1500, '', res.data.msg || '操作失败');
        }
      }).catch(() => {
        // this.elMessage(true, 'error', '操作失败')
      })

    },

    /**
     * 切换落宫
     * 
     * @param {number} index 落宫
     */
    switchLuoGong(index) {

      if (this.luoGongIndex !== index) {
        this.luoGongIndex = index; // 设置落宫
        // this.kuoZhuanData(); // 扩展数据
        // this.notification('success', 1300, '', '宫位数据已切换至：' + this.luoGongTitle[index - 1]);
      } else {
        // this.notification('warning', 1300, '', '已在当前宫位中，无需再次切换');
      }

    },

    /**
     * 显示内盘、外盘说明弹窗
     * 
     * @param {number} index 0:内盘弹窗。1:外盘弹窗。
     */
    neiWaiPan(index) {

      if (index == 0) this.neiPanDialog = true; // 显示内盘弹窗
      if (index == 1) this.waiPanDialog = true; // 显示外盘弹窗
    },

    /**
     * 获取当前日期干支
     */
    getNowGanZhi() {

      // 构造条件
      let query = {
        date: new Date(), // 日期
        yearGanZhiSet: this.yearGanZhiSet, // 年干支设置
        monthGanZhiSet: this.monthGanZhiSet, // 月干支设置
        dayGanZhiSet: this.dayGanZhiSet, // 日干支设置
        hourGanZhiSet: this.hourGanZhiSet // 时干支设置
      }

      // 发送请求
      getNowGanZhiApi(query).then((res) => {
        if (String(res.data.code) === '200') {
          if (null !== res.data.data) {
            this.beginYear = 1900;
            this.yearGanZhi = res.data.data[0];
            this.monthGanZhi = res.data.data[1];
            this.dayGanZhi = res.data.data[2];
            this.hourGanZhi = res.data.data[3];
            this.yearGanZhi2 = res.data.data[0];
            this.monthGanZhi2 = res.data.data[1];
            this.dayGanZhi2 = res.data.data[2];
            this.hourGanZhi2 = res.data.data[3];
            this.siZhuDialog = true; // 显示四柱转日期弹窗
            if (!this.siZhuDialog) {
              // 若四柱转日期弹窗未显示，则将日期类型转为公历
              this.dateType = 0;
              this.dateTypeStr = '公历';
            }
          }
        }
      }).catch(() => {
        this.dateType = 0; // 日期类型转为公历
        this.dateTypeStr = '公历'; // 日期类型转为公历
      })

    },

    /**
     * 通过四柱获取日期
     */
    getSiZhuToDate() {

      // 构造条件
      let query = {
        beginYear: this.beginYear, // 起始年份
        yearGanZhi: this.yearGanZhi, // 年干支
        monthGanZhi: this.monthGanZhi, // 月干支
        dayGanZhi: this.dayGanZhi, // 日干支
        hourGanZhi: this.hourGanZhi, // 时干支
        yearGanZhiSet: this.yearGanZhiSet, // 年干支设置
        monthGanZhiSet: this.monthGanZhiSet, // 月干支设置
        dayGanZhiSet: this.dayGanZhiSet, // 日干支设置
        hourGanZhiSet: this.hourGanZhiSet // 时干支设置
      }
      this.beginYear2 = this.beginYear;
      this.siZhuButton = true;

      // 发送请求
      ganZhiToDateApi(query).then((res) => {
        if (String(res.data.code) === '200') {
          if (null !== res.data.data) {
            if (res.data.data.length !== 0) {
              this.siZhuToDate = res.data.data;
              this.siZhuToDateTotal = res.data.data.length;
              this.siZhuButton = true;
            } else {
              this.siZhuToDate = {};
              this.siZhuToDateTotal = 0;
              this.siZhuButton = true;
              this.elMessage(3000, true, 'warning', '没有和【' + this.yearGanZhi + ' ' + this.monthGanZhi + ' ' + this.dayGanZhi + ' ' + this.hourGanZhi + '】相匹配的日期');
            }
          }
        } else {
          this.siZhuToDate = {};
          this.siZhuToDateTotal = 0;
          this.elMessage(3000, true, 'error', res.data.msg || '操作失败');
        }
      }).catch(() => {
        this.siZhuToDate = {};
        this.siZhuToDateTotal = 0;
        // this.elMessage(3000, true, 'error', '操作失败');
      })

    },

    /**
     * 设置新日期
     * 
     * @param {string} newDate 公历日期
     */
    setNewDate(newDate) {

      this.date = dateFormatter1(newDate);
      this.siZhuDialog = false; // 关闭四柱转日期弹窗
      this.elMessage(3000, true, 'success', '日期已设置');

    },

    /**
     * 判断日期是否为闰月
     */
    isLeapMonth() {

      // 条件构造
      let query = {
        date: this.date, // 日期
      }

      // 发送请求
      isLeapMonthApi(query).then((res) => {
        if (String(res.data.code) === '200') {
          var data = res.data.data;
          if (null !== data) {
            this.leapMonthStatus = data; // 否闰月状态（true: 可选。false: 不可选）
          }
        }
      })

    },

    /**
     * 获取当前公历年月日时分秒
     */
    getNowSolarDate() {

      this.year = new Date().getFullYear();
      this.month = new Date().getMonth() + 1;
      this.day = new Date().getDate();
      this.hour = new Date().getHours();
      this.minute = new Date().getMinutes();
      this.second = new Date().getSeconds();
      if (String(this.second).length === 1) this.second = '0' + this.second;

      setInterval(() => {
        this.year = new Date().getFullYear();
        this.month = new Date().getMonth() + 1;
        this.day = new Date().getDate();
        this.hour = new Date().getHours();
        this.minute = new Date().getMinutes();
        this.second = new Date().getSeconds();
        if (String(this.second).length === 1) this.second = '0' + this.second;
      }, 1000);

    },

    /**
     * 获取当前农历日期、日柱时柱、十二时辰
     */
    getNowLunarDate() {

      // 发送请求
      getNowLunarDateApi(null).then((res) => {
        if (String(res.data.code) === '200') {
          if (null !== res.data.data) {
            this.nowLunarStr = res.data.data[0]; // 农历日期
            this.nowDayHourGanZhi = res.data.data[1]; // 日柱时柱
            this.twelveHours = res.data.data[2] // 十二时辰
            // this.elMessage(3000, true, 'success', res.data.msg || '操作成功')
          } else {
            // this.elMessage(3000, true, 'error', res.data.msg || '操作失败')
          }
        } else {
          // this.elMessage(3000, true, 'error', res.data.msg || '操作失败')
        }
      }).catch(() => {
        // this.elMessage(3000, true, 'error', '操作失败')
      })

    },

    //****************************************************************************************

    /* 选项区域操作 */

    /**
     * 获取地区名称
     * 
     * @param {list} data 地区数据集合
     */
    getAddressName(data) {

      this.addressName = data.n

    },

    /**
     * 重置选项
     */
    resetting() {

      this.resettingButtonStatus = false; // 记录是否已点击重置按钮（true:已点击。false:未点击）

      var isFlag = (
        this.name !== '' ||
        this.occupy !== '' ||
        this.sexStr !== '男' ||
        // this.date !== new Date() ||
        this.dateTypeStr !== '公历' ||
        this.leapMonth !== false ||
        this.leapMonthStatus !== false ||
        this.trueSolar !== false ||
        this.address !== '110000' ||
        this.addressName !== '北京市' ||
        this.paiPanTypeStr !== '转盘' ||
        this.qiMenTypeStr !== '时家' ||
        this.paiPanSystemStr !== '拆补法' ||
        this.yearGanZhiSet !== 1 ||
        this.monthGanZhiSet !== 1 ||
        this.dayGanZhiSet !== 0 ||
        this.hourGanZhiSet !== 0 ||
        this.jieQi !== 0 ||
        this.zhiShi !== 0 ||
        this.renPanFeiZhuan !== 1 ||
        this.renPanZhuanGong !== 0 ||
        this.renPanFeiGong !== 0 ||
        this.tianPanFeiGong !== 0 ||
        this.shenPanFeiGong !== 1 ||
        this.jggMode !== true ||
        this.douZhuanXingYiMode !== 0 || 
        this.douZhuanXingYiType !== 0
      );

      if (isFlag) {
        this.name = '' // 姓名
        this.occupy = '' // 占事
        this.sexStr = '男' // 性别
        // this.date = new Date() // 日期
        this.dateTypeStr = '公历' // 日期类型
        this.leapMonth = false // 是否闰月
        this.leapMonthStatus = false; // 是否闰月状态
        this.trueSolar = false // 是否真太阳时
        this.address = '110000' // 地区：城市编码
        this.addressName = '北京市' // 地区：城市名称
        this.paiPanTypeStr = '转盘' // 排盘类型
        this.qiMenTypeStr = '时家' // 奇门类型
        this.paiPanSystemStr = '拆补法' // 排盘方法
        this.yearGanZhiSet = 1 // 年干支设置
        this.monthGanZhiSet = 1 // 月干支设置
        this.dayGanZhiSet = 0 // 日干支设置
        this.hourGanZhiSet = 0 // 时干支设置
        this.jieQi = 0 // 节气算法
        this.zhiShi = 0 // 值使排法
        this.renPanFeiZhuan = 1 // 人盘排法（排盘类型为飞盘时生效）
        this.renPanZhuanGong = 0 // 人盘转宫法（排盘类型为飞盘时生效）
        this.renPanFeiGong = 0 // 人盘飞宫法（排盘类型为飞盘时生效）
        this.tianPanFeiGong = 0 // 天盘飞宫法（排盘类型为飞盘时生效）
        this.shenPanFeiGong = 1 // 神盘飞宫法（排盘类型为飞盘时生效）
        this.jggMode = true // 九宫格模式
        this.douZhuanXingYiMode = 0
        this.douZhuanXingYiType = 0

        this.notification('success', 1000, '', '选项已全部重置');
      } else {
        // this.notification('warning', 1000, '', '选项未更改');
      }

      // 是否重置日期
      if (this.resDate) this.date = new Date();

      this.resettingButtonStatus = true; // 记录是否已点击重置按钮（true:已点击。false:未点击）
      if (isFlag) this.initializeData(); // ★ 初始化数据

    },

    /**
     * 返回排盘
     */
    returnPaiPanPageMethod() {

      this.resetting(); // 重置选项

      this.nTab = '1'; // 重置默认显示伏吟
      this.kyTab = '1'; // 重置默认显示十干克应
      this.luoGongIndex = 1; // 重置落宫为坎一宫
      this.guaTab = '1'; // 重置默认显示门宫卦
      this.dataAllPage = 1; // 重置为默认显示数据（1:基础信息。2:更多信息）
      this.jgpCollapse = '1'; // 折叠信息解读-奇门九宫盘面板
      this.douZhuanXingYiStatus = false; // 未斗转星移
      this.douZhuanXingYiCount = 0; // 重置斗转星移次数

      this.dataShiLiStatus = true;

    },

    /**
     * 切换完整数据显示界面
     * 
     * @param {number} index 1:基础信息。2:更多信息
     */
    dataAllPageMethod(index) {

      this.dataAllPage = index;

    },

    /**
     * 将排盘类型切换为飞盘（快捷切换）
     */
    paiPanTypeSwitch() {

      this.paiPanType = 1;
      this.paiPanTypeStr = '飞盘';

    },

    /**
     * 占事功能提示
     */
    occupyPrompt() {

      this.notification('info', 1500, '', '该功能正在完善中，暂未提供相关解读');

    },

    /**
     * 更多功能提示
     */
    gengduoPrompt() {

      this.notification('info', 1500, '', '更多信息正在完善中 ...');

    },

    //****************************************************************************************

    /* 通用方法  */

    /**
     * 五行颜色
     * 
     * @param {string} wuXing 五行（两个）
     */
    wxc(wuXing) {

      let w1 = wuXing.substring(0, 1) // 五行1
      let w2 = wuXing.substring(1, 2) // 五行2
      let newW = '' // 新五行

      if ('木' === w1) {
        w1 = wuXing.replace(wuXing, '<font color="#07DA30">' + w1 + '</font>');
      }
      if ('火' === w1) {
        w1 = wuXing.replace(wuXing, '<font color="#d30505">' + w1 + '</font>');
      }
      if ('土' === w1) {
        w1 = wuXing.replace(wuXing, '<font color="#8b6d03">' + w1 + '</font>');
      }
      if ('金' === w1) {
        w1 = wuXing.replace(wuXing, '<font color="#ef9104">' + w1 + '</font>');
      }
      if ('水' === w1) {
        w1 = wuXing.replace(wuXing, '<font color="#2e83f6">' + w1 + '</font>');
      }

      if ('木' === w2) {
        newW = w1 + wuXing.replace(wuXing, '<font color="#07DA30">' + w2 + '</font>');
      }
      if ('火' === w2) {
        newW = w1 + wuXing.replace(wuXing, '<font color="#d30505">' + w2 + '</font>');
      }
      if ('土' === w2) {
        newW = w1 + wuXing.replace(wuXing, '<font color="#8b6d03">' + w2 + '</font>');
      }
      if ('金' === w2) {
        newW = w1 + wuXing.replace(wuXing, '<font color="#ef9104">' + w2 + '</font>');
      }
      if ('水' === w2) {
        newW = w1 + wuXing.replace(wuXing, '<font color="#2e83f6">' + w2 + '</font>');
      }

      return newW;

    },

    /**
     * 六仪击邢、三奇入墓、门迫颜色
     * 
     * @param data 数据
     * @param link 状态
     */
    jiXingRuMuMenPoColor(data, link) {

      if ('' === link) {
        return data;
      } else if ('击邢' === link) {
        return data.replace(data, '<font color="#d30505"><b>' + data + '</b></font>');
      } else if ('入墓' === link) {
        return data.replace(data, '<font color="#d3a12d"><b>' + data + '</b></font>');
      } else if ('击邢入墓' === link) {
        return data.replace(data, '<font color="#4d89e4"><b>' + data + '</b></font>');
      } else if ('门迫' === link) {
        return data.replace(data, '<font color="#9b4de4"><b>' + data + '</b></font>');
      }

    },


    //****************************************************************************************

    /**
     * 消息提示
     * 
     * @param {number} duration 显示时间（单位：毫秒）
     * @param {boolean} showClose 是否可关闭（true:是。false:否）
     * @param {string} type 消息类型（success、warning、error）
     * @param {string} message 提示内容
     */
    elMessage(duration, showClose, type, message) {
      ElMessage({
        duration: duration,
        showClose: showClose,
        type: type,
        message: message,
        plain: true
      })
    },

    /**
     * 通知提示（右上角弹出）
     * 
     * @param {string} type 消息类型（info、success、warning、error）
     * @param {number} duration 自动关闭延迟，0为不关闭（单位：毫秒）
     * @param {string} title 标题
     * @param {string} message 提示内容
     */
    notification(type, duration, title, message) {
      ElNotification({
        type: type,
        title: title,
        message: message,
        duration: duration,
        position: 'top-right',
        dangerouslyUseHTMLString: true
      })
    }

  }
}
